#!/usr/bin/env python3
# -*- coding: utf-8 -*-

print('\n\n\033[0;31;40m-1--------正则表达式--------------------------------\033[0m')
'''
\d      一个数字
\w      一个字母或数字
.       任意字符
*       任意个字符（包括0个）
+       至少一个字符
?       0个或1个字符
{n}     n个字符
{n, m}  n-m个字符
[]      范围
|       或
^       行的开头
$       行的结束
'''
#例子：\d{3}\-\d{3,8}    匹配3个数字，一个横线(需要转义符)，再来3-8个数字
#使用re模块匹配字符串
import re

re.match(r'^\d{3}\-\d{3,8}$', '010-12345')  #匹配成功返回Match对象，否则返回None

#切分字符串
print(re.split(r'[\s\,\;]+', 'a,b;; c  d'))  #正则表达式中写用来拆分abcd之间的相关符号

#分组，使用()讲正则表达式中的部分内容括起来即可定义组
m = re.match(r'^(\d{3})-(\d{3,8})$', '010-12345')
print(m.groups())  #获得tuple对象
print(m.group(1))  #获得角码为1的tuple对象内容

#贪婪匹配，加个?就可以让\d+采用非贪婪匹配
print(re.match(r'^(\d+?)(0*)$', '102300').groups())  #原表达式：(r'^(\d+)(0*)$', '102300')

#预编译正则表达式，用于一个正则重复多次使用场景
re_telephone = re.compile(r'^(\d{3})-(\d{3,8})$')
print(re_telephone.match('010-12345').groups())